Часть 6. Структура приложения

Часть 1. Введение
Часть 2. Общая структура
Часть 3. Первичные цепочки
Часть 4. Администратор данных
Часть 5. Администратор процессов
Часть 6. Структура приложения
Часть 7. Публикация в GCP

Постановка задачи

В Частях 3 и 4 мы показали как писать простые универсальные адиминки для основных объектов предприятия — данных и процессов. В этой части мы покажем структуру первого эликсир приложения PLM для управления предприятием совершающим аутсорсную деятельность. Требования к этому приложению были сформулированы в Части 1, а первичная структура самого предприятия и его ресурсов спратана в приложении ERP (которое должно публиковаться с приватном репозитории). Но для примера и во ися прозрачности бухгалтерского учета между самими программистами организационная структура предприятия заэкспожена публично полность, вместе с инвойсами и аггрегированными суммами по зарлплатным ведомостям, но без детализации по ЗП, зато с часовыми аллокациями рабочего временя (рейты анонимны, опционы насчитываются независимо от рейтов). Кроме опционов можно совершать инвестирование в проекты этой аутсорс компании поз залог самих же проектов компании, который акумулируется в соотвествующем субконто счёте после вычисления чистой нерапрделённой прибыли. Всего количество статей для распределения не много: 1) это резерв компании, 2) кредитованине других проектов, 3) опционы программистов и 4) исследования и разработка.

Конфигурация

Чтобы не писать каждый раз эту прелюдию для каждого приложения приведем на примере PLM проекта, который уже включает почти весь стек: N2O, KVS, BPE, а также другие N2O протоколы CHAT, NITRO. NITRO — является портом Nitrogen Web Framework написанный Расти Клопхаусом.

config/config.exs

use Mix.Config config :n2o, pickler: :n2o_secret, mq: :n2o_syn, port: 8043, proto: CHAT.Server mqtt_services: ['erp', 'plm'], ws_services: ['chat'], upload: "./priv/static", routes: KVS.Routes, protocols: [ :n2o_heart, :n2o_nitro, :n2o_ftp, :bpe_n2o, CHAT.TXT ] config :kvs, dba: :kvs_rocks, dba_st: :kvs_st, schema: [ :kvs, :kvs_stream, :bpe_metainfo ] config :erp, boot: [ :erp_boot, :acc_boot, :pay_boot, :plm_boot, :fin_boot ]

Публикация

mix.exs

defmodule PLM.Mixfile do use Mix.Project def project() do [ app: :plm, version: "0.7.1", elixir: "~> 1.8.1", description: "PLM", deps: deps() ] end def application() do [ mod: {PLM.Application, []}, applications: [ :ranch, :cowboy, :rocksdb, :kvs, :syn, :erp, :bpe, :n2o, :chat ] ] end def deps() do [ {:ex_doc, "~> 0.20.2", only: :dev}, {:cowboy, "~> 2.5.0"}, {:rocksdb, "~> 1.2.0"}, {:chat, "~> 3.7.2"}, {:n2o, "~> 6.7.1"}, {:syn, "~> 1.6.3"}, {:kvs, "~> 6.7.4"}, {:erp, "~> 0.7.6"}, {:bpe, "~> 4.7.3"}, {:nitro, "~> 4.7.3"} ] end emd

Страницы

PLM

PLM.Index

def event(:init) def event({:chart, code, x, y, z, i}) def event({:invest, code})

PLM.CashFlow

def event(:init) def event(:create_investment) def event(:create_income) def event(:create_outcome) def event({:discard, []})

FIN

FIN.Index

def event(:init) def event({:txs, proc}) def event({:off, form})

LDAP

LDAP.Index

def event(:init) def event(:on) def event({:auth, form}) def event({:close, form}) def event({:revoke, x}) def event({:off, form})

Роутер

Роутинг контроллеров страниц Nitrogen Web фреймворка. В этом роутере мы подключим все наши модули разработанные в Частях 3 и 4, т.е. администраторы данных и процессов.

ldap — LDAP.Index
form — FORM.Index
act — BPE.Actor
bpe — BPE.Index
kvs — KVS.Index
plm — PLM.Index
cashflow — PLM.CashFlow

erpuno/plm